#include "Person.h"
#include "Teacher.h"
#include "Student.h"

//公有继承的特点是基类的公有成员和保护成员作为派生类的成员时，它们都保持原有的状态，而基类的私有成员仍然是私有的，不能被这个派生类的子类所访问
void public_exnteds()
{
	Teacher t1; //首先调用父类的无参构造函数(调用父类构造函数目的是初始化数据并不会创建父类对象),再调用自己的无参构造函数
	t1.set_age(32);
	t1.set_gender("男");
	t1.set_name("张三");

	string name = t1.get_name();
	string gender = t1.get_gender();
	int age = t1.get_age();

	cout << "name = " << name << endl;
	cout << "gender = " << gender << endl;
	cout << "age = " << age << endl;

	cout << "num = " << Teacher::get_num() << endl;

	//方法结束,对象在栈中,先析构Teacher对象,再析构父类对象
}

//私有继承的特点是基类的公有成员和保护成员都作为派生类的私有成员，并且不能被这个派生类的子类所访问
void private_extends()
{
	Student st1;
	//因为是私有继承,类外部不能访问
/*
	st1.set_age(32);
	st1.set_gender("男");
	st1.set_name("张三");

	string name = st1.get_name();
	string gender = st1.get_gender();
	int age = st1.get_age();

	cout << "name = " << name << endl;
	cout << "gender = " << gender << endl;
	cout << "age = " << age << endl;
*/
}

//保护继承的特点是基类的所有公有成员和保护成员都成为派生类的保护成员，并且只能被它的派生类成员函数或友元访问，基类的私有成员仍然是私有的

void main()
{
	public_exnteds();
	system("pause");
}